package com.mazaiting.manager.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.mazaiting.common.core.domain.result.Option;
import com.mazaiting.common.core.ex.exceptions.BaseException;
import com.mazaiting.common.core.ex.exceptions.BusinessException;
import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.manager.domain.entity.SysDictItem;
import com.mazaiting.manager.domain.form.DictItemForm;
import com.mazaiting.manager.domain.query.DictItemPageQuery;
import com.mazaiting.manager.domain.vo.dict.DictItemPageVO;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;

import java.util.List;

/**
 * <p>
 * 字典数据表 服务类
 * </p>
 *
 * @author mazaiting
 * @since 2022-10-16
 */
public interface ISysDictItemService extends IService<SysDictItem> {

    /**
     * 字典数据项分页列表
     * @param queryParams 查询参数
     * @return 分页数据
     */
    BasePageVO<DictItemPageVO> listDictItemPages(DictItemPageQuery queryParams);

    /**
     * 字典数据项表单
     * @param id 字典ID
     * @return 表单结果
     */
    DictItemForm getDictItemFormData(Long id) throws EmptyObjectException;

    /**
     * 新增字典数据项
     * @param dictItemForm 字典表单
     * @return true: 新增成功; false: 新增失败
     */
    boolean save(DictItemForm dictItemForm) throws BusinessException;

    /**
     * 修改字典数据项
     * @param dictItemForm 字典表单
     * @return true: 更新成功; false: 更新失败
     */
    boolean update(DictItemForm dictItemForm) throws BaseException;

    /**
     * 删除字典
     * @param ids 字典ID，多个以英文逗号(,)分割
     * @return true: 删除成功; false: 删除失败
     */
    boolean deleteByIds(String ids);

    /**
     * 根据字典类型编码获取字典数据项
     * @param typeCode 字典类型编码
     * @return 选项
     */
    List<Option<String>> listDictItemsByTypeCode(String typeCode);
}
